{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# XGBoost Parameter Tuning for RentListingInquries Dataset\n",
    "## 第一步 直接调用xgboost内嵌的cv寻找最佳的参数n_estimators\n",
    "默认参数，此时学习率为0.1，比较大，观察弱分类数目的大致范围\n",
    "（采用默认参数配置，看看模型是过拟合还是欠拟合）\n",
    "\n",
    "首先 import 必要的模块"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [],
   "source": [
    "from xgboost import XGBClassifier\n",
    "import xgboost as xgb\n",
    "\n",
    "import pandas as pd \n",
    "import numpy as np\n",
    "\n",
    "from sklearn.model_selection import GridSearchCV\n",
    "from sklearn.model_selection import StratifiedKFold\n",
    "\n",
    "from sklearn.metrics import log_loss\n",
    "\n",
    "from matplotlib import pyplot\n",
    "import seaborn as sns\n",
    "%matplotlib inline"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 读取数据"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [],
   "source": [
    "# path to where the data lies\n",
    "dpath = './'\n",
    "train = pd.read_csv(dpath +\"RentListingInquries_FE_train.csv\")\n",
    "test = pd.read_csv(dpath +\"RentListingInquries_FE_test.csv\")\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>bathrooms</th>\n",
       "      <th>bedrooms</th>\n",
       "      <th>price</th>\n",
       "      <th>price_bathrooms</th>\n",
       "      <th>price_bedrooms</th>\n",
       "      <th>room_diff</th>\n",
       "      <th>room_num</th>\n",
       "      <th>Year</th>\n",
       "      <th>Month</th>\n",
       "      <th>Day</th>\n",
       "      <th>...</th>\n",
       "      <th>walk</th>\n",
       "      <th>walls</th>\n",
       "      <th>war</th>\n",
       "      <th>washer</th>\n",
       "      <th>water</th>\n",
       "      <th>wheelchair</th>\n",
       "      <th>wifi</th>\n",
       "      <th>windows</th>\n",
       "      <th>work</th>\n",
       "      <th>interest_level</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>1.5</td>\n",
       "      <td>3</td>\n",
       "      <td>3000</td>\n",
       "      <td>1200.0</td>\n",
       "      <td>750.000000</td>\n",
       "      <td>-1.5</td>\n",
       "      <td>4.5</td>\n",
       "      <td>2016</td>\n",
       "      <td>6</td>\n",
       "      <td>24</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>1.0</td>\n",
       "      <td>2</td>\n",
       "      <td>5465</td>\n",
       "      <td>2732.5</td>\n",
       "      <td>1821.666667</td>\n",
       "      <td>-1.0</td>\n",
       "      <td>3.0</td>\n",
       "      <td>2016</td>\n",
       "      <td>6</td>\n",
       "      <td>12</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>2</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>1.0</td>\n",
       "      <td>1</td>\n",
       "      <td>2850</td>\n",
       "      <td>1425.0</td>\n",
       "      <td>1425.000000</td>\n",
       "      <td>0.0</td>\n",
       "      <td>2.0</td>\n",
       "      <td>2016</td>\n",
       "      <td>4</td>\n",
       "      <td>17</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>1.0</td>\n",
       "      <td>1</td>\n",
       "      <td>3275</td>\n",
       "      <td>1637.5</td>\n",
       "      <td>1637.500000</td>\n",
       "      <td>0.0</td>\n",
       "      <td>2.0</td>\n",
       "      <td>2016</td>\n",
       "      <td>4</td>\n",
       "      <td>18</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>2</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>1.0</td>\n",
       "      <td>4</td>\n",
       "      <td>3350</td>\n",
       "      <td>1675.0</td>\n",
       "      <td>670.000000</td>\n",
       "      <td>-3.0</td>\n",
       "      <td>5.0</td>\n",
       "      <td>2016</td>\n",
       "      <td>4</td>\n",
       "      <td>28</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>2</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>5 rows × 228 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "   bathrooms  bedrooms  price  price_bathrooms  price_bedrooms  room_diff  \\\n",
       "0        1.5         3   3000           1200.0      750.000000       -1.5   \n",
       "1        1.0         2   5465           2732.5     1821.666667       -1.0   \n",
       "2        1.0         1   2850           1425.0     1425.000000        0.0   \n",
       "3        1.0         1   3275           1637.5     1637.500000        0.0   \n",
       "4        1.0         4   3350           1675.0      670.000000       -3.0   \n",
       "\n",
       "   room_num  Year  Month  Day       ...        walk  walls  war  washer  \\\n",
       "0       4.5  2016      6   24       ...           0      0    0       0   \n",
       "1       3.0  2016      6   12       ...           0      0    0       0   \n",
       "2       2.0  2016      4   17       ...           0      0    0       0   \n",
       "3       2.0  2016      4   18       ...           0      0    0       0   \n",
       "4       5.0  2016      4   28       ...           0      0    1       0   \n",
       "\n",
       "   water  wheelchair  wifi  windows  work  interest_level  \n",
       "0      0           0     0        0     0               1  \n",
       "1      0           0     0        0     0               2  \n",
       "2      0           0     0        0     0               0  \n",
       "3      0           0     0        0     0               2  \n",
       "4      0           0     0        0     0               2  \n",
       "\n",
       "[5 rows x 228 columns]"
      ]
     },
     "execution_count": 4,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "train.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "<class 'pandas.core.frame.DataFrame'>\n",
      "RangeIndex: 49352 entries, 0 to 49351\n",
      "Columns: 228 entries, bathrooms to interest_level\n",
      "dtypes: float64(9), int64(219)\n",
      "memory usage: 85.8 MB\n"
     ]
    }
   ],
   "source": [
    "train.info()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>bathrooms</th>\n",
       "      <th>bedrooms</th>\n",
       "      <th>price</th>\n",
       "      <th>price_bathrooms</th>\n",
       "      <th>price_bedrooms</th>\n",
       "      <th>room_diff</th>\n",
       "      <th>room_num</th>\n",
       "      <th>Year</th>\n",
       "      <th>Month</th>\n",
       "      <th>Day</th>\n",
       "      <th>...</th>\n",
       "      <th>walk</th>\n",
       "      <th>walls</th>\n",
       "      <th>war</th>\n",
       "      <th>washer</th>\n",
       "      <th>water</th>\n",
       "      <th>wheelchair</th>\n",
       "      <th>wifi</th>\n",
       "      <th>windows</th>\n",
       "      <th>work</th>\n",
       "      <th>interest_level</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>count</th>\n",
       "      <td>49352.00000</td>\n",
       "      <td>49352.000000</td>\n",
       "      <td>4.935200e+04</td>\n",
       "      <td>4.935200e+04</td>\n",
       "      <td>4.935200e+04</td>\n",
       "      <td>49352.000000</td>\n",
       "      <td>49352.000000</td>\n",
       "      <td>49352.0</td>\n",
       "      <td>49352.000000</td>\n",
       "      <td>49352.000000</td>\n",
       "      <td>...</td>\n",
       "      <td>49352.000000</td>\n",
       "      <td>49352.000000</td>\n",
       "      <td>49352.000000</td>\n",
       "      <td>49352.000000</td>\n",
       "      <td>49352.000000</td>\n",
       "      <td>49352.000000</td>\n",
       "      <td>49352.000000</td>\n",
       "      <td>49352.000000</td>\n",
       "      <td>49352.000000</td>\n",
       "      <td>49352.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>mean</th>\n",
       "      <td>1.21218</td>\n",
       "      <td>1.541640</td>\n",
       "      <td>3.830174e+03</td>\n",
       "      <td>1.697863e+03</td>\n",
       "      <td>1.657567e+03</td>\n",
       "      <td>-0.329460</td>\n",
       "      <td>2.753820</td>\n",
       "      <td>2016.0</td>\n",
       "      <td>5.014852</td>\n",
       "      <td>15.206881</td>\n",
       "      <td>...</td>\n",
       "      <td>0.003080</td>\n",
       "      <td>0.000385</td>\n",
       "      <td>0.186477</td>\n",
       "      <td>0.009361</td>\n",
       "      <td>0.000446</td>\n",
       "      <td>0.028165</td>\n",
       "      <td>0.002026</td>\n",
       "      <td>0.001013</td>\n",
       "      <td>0.000952</td>\n",
       "      <td>1.616895</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>std</th>\n",
       "      <td>0.50142</td>\n",
       "      <td>1.115018</td>\n",
       "      <td>2.206687e+04</td>\n",
       "      <td>1.100477e+04</td>\n",
       "      <td>7.817996e+03</td>\n",
       "      <td>0.947732</td>\n",
       "      <td>1.446091</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.824442</td>\n",
       "      <td>8.280749</td>\n",
       "      <td>...</td>\n",
       "      <td>0.055412</td>\n",
       "      <td>0.019618</td>\n",
       "      <td>0.389495</td>\n",
       "      <td>0.101625</td>\n",
       "      <td>0.021109</td>\n",
       "      <td>0.165446</td>\n",
       "      <td>0.044969</td>\n",
       "      <td>0.031814</td>\n",
       "      <td>0.030846</td>\n",
       "      <td>0.626035</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>min</th>\n",
       "      <td>0.00000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>4.300000e+01</td>\n",
       "      <td>2.150000e+01</td>\n",
       "      <td>4.300000e+01</td>\n",
       "      <td>-5.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>2016.0</td>\n",
       "      <td>4.000000</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>...</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>25%</th>\n",
       "      <td>1.00000</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>2.500000e+03</td>\n",
       "      <td>1.225000e+03</td>\n",
       "      <td>1.066667e+03</td>\n",
       "      <td>-1.000000</td>\n",
       "      <td>2.000000</td>\n",
       "      <td>2016.0</td>\n",
       "      <td>4.000000</td>\n",
       "      <td>8.000000</td>\n",
       "      <td>...</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>1.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>50%</th>\n",
       "      <td>1.00000</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>3.150000e+03</td>\n",
       "      <td>1.500000e+03</td>\n",
       "      <td>1.383417e+03</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>2.000000</td>\n",
       "      <td>2016.0</td>\n",
       "      <td>5.000000</td>\n",
       "      <td>15.000000</td>\n",
       "      <td>...</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>2.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>75%</th>\n",
       "      <td>1.00000</td>\n",
       "      <td>2.000000</td>\n",
       "      <td>4.100000e+03</td>\n",
       "      <td>1.850000e+03</td>\n",
       "      <td>1.962500e+03</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>4.000000</td>\n",
       "      <td>2016.0</td>\n",
       "      <td>6.000000</td>\n",
       "      <td>22.000000</td>\n",
       "      <td>...</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>2.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>max</th>\n",
       "      <td>10.00000</td>\n",
       "      <td>8.000000</td>\n",
       "      <td>4.490000e+06</td>\n",
       "      <td>2.245000e+06</td>\n",
       "      <td>1.496667e+06</td>\n",
       "      <td>8.000000</td>\n",
       "      <td>13.500000</td>\n",
       "      <td>2016.0</td>\n",
       "      <td>6.000000</td>\n",
       "      <td>31.000000</td>\n",
       "      <td>...</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>2.000000</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>2.000000</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>8 rows × 228 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "         bathrooms      bedrooms         price  price_bathrooms  \\\n",
       "count  49352.00000  49352.000000  4.935200e+04     4.935200e+04   \n",
       "mean       1.21218      1.541640  3.830174e+03     1.697863e+03   \n",
       "std        0.50142      1.115018  2.206687e+04     1.100477e+04   \n",
       "min        0.00000      0.000000  4.300000e+01     2.150000e+01   \n",
       "25%        1.00000      1.000000  2.500000e+03     1.225000e+03   \n",
       "50%        1.00000      1.000000  3.150000e+03     1.500000e+03   \n",
       "75%        1.00000      2.000000  4.100000e+03     1.850000e+03   \n",
       "max       10.00000      8.000000  4.490000e+06     2.245000e+06   \n",
       "\n",
       "       price_bedrooms     room_diff      room_num     Year         Month  \\\n",
       "count    4.935200e+04  49352.000000  49352.000000  49352.0  49352.000000   \n",
       "mean     1.657567e+03     -0.329460      2.753820   2016.0      5.014852   \n",
       "std      7.817996e+03      0.947732      1.446091      0.0      0.824442   \n",
       "min      4.300000e+01     -5.000000      0.000000   2016.0      4.000000   \n",
       "25%      1.066667e+03     -1.000000      2.000000   2016.0      4.000000   \n",
       "50%      1.383417e+03      0.000000      2.000000   2016.0      5.000000   \n",
       "75%      1.962500e+03      0.000000      4.000000   2016.0      6.000000   \n",
       "max      1.496667e+06      8.000000     13.500000   2016.0      6.000000   \n",
       "\n",
       "                Day       ...                walk         walls           war  \\\n",
       "count  49352.000000       ...        49352.000000  49352.000000  49352.000000   \n",
       "mean      15.206881       ...            0.003080      0.000385      0.186477   \n",
       "std        8.280749       ...            0.055412      0.019618      0.389495   \n",
       "min        1.000000       ...            0.000000      0.000000      0.000000   \n",
       "25%        8.000000       ...            0.000000      0.000000      0.000000   \n",
       "50%       15.000000       ...            0.000000      0.000000      0.000000   \n",
       "75%       22.000000       ...            0.000000      0.000000      0.000000   \n",
       "max       31.000000       ...            1.000000      1.000000      1.000000   \n",
       "\n",
       "             washer         water    wheelchair          wifi       windows  \\\n",
       "count  49352.000000  49352.000000  49352.000000  49352.000000  49352.000000   \n",
       "mean       0.009361      0.000446      0.028165      0.002026      0.001013   \n",
       "std        0.101625      0.021109      0.165446      0.044969      0.031814   \n",
       "min        0.000000      0.000000      0.000000      0.000000      0.000000   \n",
       "25%        0.000000      0.000000      0.000000      0.000000      0.000000   \n",
       "50%        0.000000      0.000000      0.000000      0.000000      0.000000   \n",
       "75%        0.000000      0.000000      0.000000      0.000000      0.000000   \n",
       "max        2.000000      1.000000      1.000000      1.000000      1.000000   \n",
       "\n",
       "               work  interest_level  \n",
       "count  49352.000000    49352.000000  \n",
       "mean       0.000952        1.616895  \n",
       "std        0.030846        0.626035  \n",
       "min        0.000000        0.000000  \n",
       "25%        0.000000        1.000000  \n",
       "50%        0.000000        2.000000  \n",
       "75%        0.000000        2.000000  \n",
       "max        1.000000        2.000000  \n",
       "\n",
       "[8 rows x 228 columns]"
      ]
     },
     "execution_count": 6,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "train.describe()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "<class 'pandas.core.frame.DataFrame'>\n",
      "RangeIndex: 74659 entries, 0 to 74658\n",
      "Columns: 227 entries, bathrooms to work\n",
      "dtypes: float64(9), int64(218)\n",
      "memory usage: 129.3 MB\n"
     ]
    }
   ],
   "source": [
    "test.info()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "sns.countplot(train.interest_level);\n",
    "pyplot.xlabel('interest_level');\n",
    "pyplot.ylabel('Number of occurrences');"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [],
   "source": [
    "y_train = train['interest_level']\n",
    "X_train = np.array(train.drop([\"interest_level\"], axis=1))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(49352, 227)"
      ]
     },
     "execution_count": 10,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "X_train.shape"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(49352,)"
      ]
     },
     "execution_count": 11,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "y_train.shape"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {},
   "outputs": [],
   "source": [
    "# prepare cross validation\n",
    "kfold = StratifiedKFold(n_splits=5, shuffle=True, random_state=3)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "默认参数，此时学习率为0.1，比较大，观察弱分类数目的大致范围\n",
    "（采用默认参数配置，看看模型是过拟合还是欠拟合）"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {},
   "outputs": [],
   "source": [
    "def modelfit(alg, X_train, y_train, useTrainCV=True, cv_folds=None, early_stopping_rounds=100):\n",
    "    \n",
    "    if useTrainCV:\n",
    "        xgb_param = alg.get_xgb_params()\n",
    "        xgb_param['num_class'] = 3\n",
    "        \n",
    "        xgtrain = xgb.DMatrix(X_train, label = y_train)\n",
    "        \n",
    "        cvresult = xgb.cv(xgb_param, xgtrain, num_boost_round=alg.get_params()['n_estimators'], folds =cv_folds,\n",
    "                         metrics='mlogloss', early_stopping_rounds=early_stopping_rounds)\n",
    "        \n",
    "        n_estimators = cvresult.shape[0]\n",
    "        alg.set_params(n_estimators = n_estimators)\n",
    "        \n",
    "        print(cvresult)\n",
    "        #result = pd.DataFrame(cvresult)   #cv缺省返回结果为DataFrame\n",
    "        #result.to_csv('my_preds.csv', index_label = 'n_estimators')\n",
    "        cvresult.to_csv('1_nestimators.csv', index_label = 'n_estimators')\n",
    "        \n",
    "        # plot\n",
    "        test_means = cvresult['test-mlogloss-mean']\n",
    "        test_stds = cvresult['test-mlogloss-std'] \n",
    "        \n",
    "        train_means = cvresult['train-mlogloss-mean']\n",
    "        train_stds = cvresult['train-mlogloss-std'] \n",
    "\n",
    "        x_axis = range(0, n_estimators)\n",
    "        pyplot.errorbar(x_axis, test_means, yerr=test_stds ,label='Test')\n",
    "        pyplot.errorbar(x_axis, train_means, yerr=train_stds ,label='Train')\n",
    "        pyplot.title(\"XGBoost n_estimators vs Log Loss\")\n",
    "        pyplot.xlabel( 'n_estimators' )\n",
    "        pyplot.ylabel( 'Log Loss' )\n",
    "        pyplot.savefig( '1_nestimators.png' )\n",
    "    \n",
    "    #Fit the algorithm on the data\n",
    "    alg.fit(X_train, y_train, eval_metric='mlogloss')\n",
    "        \n",
    "    #Predict training set:\n",
    "    train_predprob = alg.predict_proba(X_train)\n",
    "    logloss = log_loss(y_train, train_predprob)\n",
    "\n",
    "        \n",
    "    #Print model report:\n",
    "    print(\"logloss of train :\" )\n",
    "    print(logloss)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "     train-mlogloss-mean  train-mlogloss-std  test-mlogloss-mean  \\\n",
      "0               1.039278            0.000503            1.039733   \n",
      "1               0.989292            0.000738            0.990444   \n",
      "2               0.946897            0.000551            0.948506   \n",
      "3               0.909763            0.000394            0.911813   \n",
      "4               0.877998            0.000349            0.880420   \n",
      "5               0.850179            0.000269            0.853021   \n",
      "6               0.825811            0.000579            0.829046   \n",
      "7               0.804327            0.000739            0.808015   \n",
      "8               0.785454            0.000692            0.789617   \n",
      "9               0.768734            0.000775            0.773389   \n",
      "10              0.753876            0.000791            0.758915   \n",
      "11              0.740574            0.000605            0.745925   \n",
      "12              0.728711            0.000562            0.734593   \n",
      "13              0.718054            0.000531            0.724300   \n",
      "14              0.708509            0.000677            0.715160   \n",
      "15              0.699810            0.000623            0.706760   \n",
      "16              0.692250            0.000778            0.699615   \n",
      "17              0.685260            0.000687            0.693021   \n",
      "18              0.679074            0.000733            0.687272   \n",
      "19              0.673277            0.000762            0.681913   \n",
      "20              0.668009            0.000846            0.677038   \n",
      "21              0.663254            0.000887            0.672676   \n",
      "22              0.658811            0.000858            0.668527   \n",
      "23              0.654820            0.000991            0.664890   \n",
      "24              0.650953            0.001028            0.661430   \n",
      "25              0.647294            0.001097            0.658224   \n",
      "26              0.644110            0.000930            0.655405   \n",
      "27              0.640932            0.000770            0.652700   \n",
      "28              0.638166            0.000711            0.650312   \n",
      "29              0.635449            0.000590            0.648038   \n",
      "..                   ...                 ...                 ...   \n",
      "290             0.491461            0.000983            0.587408   \n",
      "291             0.491137            0.000974            0.587396   \n",
      "292             0.490870            0.000937            0.587434   \n",
      "293             0.490603            0.000967            0.587434   \n",
      "294             0.490289            0.000965            0.587394   \n",
      "295             0.489995            0.000961            0.587358   \n",
      "296             0.489775            0.000980            0.587390   \n",
      "297             0.489500            0.000987            0.587421   \n",
      "298             0.489205            0.001016            0.587452   \n",
      "299             0.488952            0.001030            0.587388   \n",
      "300             0.488675            0.001002            0.587355   \n",
      "301             0.488368            0.000971            0.587319   \n",
      "302             0.488066            0.000985            0.587318   \n",
      "303             0.487793            0.000961            0.587317   \n",
      "304             0.487520            0.000945            0.587328   \n",
      "305             0.487224            0.000959            0.587281   \n",
      "306             0.486966            0.000959            0.587306   \n",
      "307             0.486690            0.000929            0.587243   \n",
      "308             0.486412            0.000920            0.587316   \n",
      "309             0.486152            0.000904            0.587317   \n",
      "310             0.485859            0.000887            0.587290   \n",
      "311             0.485582            0.000902            0.587347   \n",
      "312             0.485263            0.000935            0.587288   \n",
      "313             0.484977            0.000959            0.587194   \n",
      "314             0.484673            0.000970            0.587060   \n",
      "315             0.484435            0.000980            0.587014   \n",
      "316             0.484216            0.000963            0.586986   \n",
      "317             0.483956            0.000953            0.586955   \n",
      "318             0.483641            0.000970            0.586939   \n",
      "319             0.483376            0.000904            0.586933   \n",
      "\n",
      "     test-mlogloss-std  \n",
      "0             0.000290  \n",
      "1             0.001025  \n",
      "2             0.001008  \n",
      "3             0.001251  \n",
      "4             0.001251  \n",
      "5             0.001159  \n",
      "6             0.001293  \n",
      "7             0.001442  \n",
      "8             0.001612  \n",
      "9             0.001385  \n",
      "10            0.001454  \n",
      "11            0.001799  \n",
      "12            0.001713  \n",
      "13            0.001903  \n",
      "14            0.001753  \n",
      "15            0.001694  \n",
      "16            0.001644  \n",
      "17            0.001753  \n",
      "18            0.001724  \n",
      "19            0.001805  \n",
      "20            0.001839  \n",
      "21            0.001863  \n",
      "22            0.001890  \n",
      "23            0.001839  \n",
      "24            0.001968  \n",
      "25            0.002011  \n",
      "26            0.002120  \n",
      "27            0.002241  \n",
      "28            0.002272  \n",
      "29            0.002302  \n",
      "..                 ...  \n",
      "290           0.003656  \n",
      "291           0.003661  \n",
      "292           0.003713  \n",
      "293           0.003700  \n",
      "294           0.003698  \n",
      "295           0.003684  \n",
      "296           0.003618  \n",
      "297           0.003567  \n",
      "298           0.003573  \n",
      "299           0.003633  \n",
      "300           0.003558  \n",
      "301           0.003569  \n",
      "302           0.003585  \n",
      "303           0.003550  \n",
      "304           0.003545  \n",
      "305           0.003552  \n",
      "306           0.003502  \n",
      "307           0.003486  \n",
      "308           0.003429  \n",
      "309           0.003397  \n",
      "310           0.003362  \n",
      "311           0.003374  \n",
      "312           0.003348  \n",
      "313           0.003344  \n",
      "314           0.003399  \n",
      "315           0.003430  \n",
      "316           0.003423  \n",
      "317           0.003379  \n",
      "318           0.003353  \n",
      "319           0.003451  \n",
      "\n",
      "[320 rows x 4 columns]\n",
      "logloss of train :\n",
      "0.49831166372800495\n"
     ]
    },
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAYUAAAEXCAYAAABCjVgAAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDMuMC4wLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvqOYd8AAAIABJREFUeJzt3XmcHHWd//HXp3uuzJFMjsk5OSCEI8gVIrcSRRHQBVREENSgK17surquP9z1py7701V3dRVBEV1AUUBAVBQ8UJD7CjcECAnkvkOSOZLM+fn98a2ZVDrdcyTTU93p9/PxqExdXfXp6km/p65vmbsjIiICkEq6ABERKRwKBRER6aVQEBGRXgoFERHppVAQEZFeCgUREemlUBCJMbN/NbOfJF2HSFIUCkXGzGrNbKmZXRAbV2dmy83snNi4uWb2ezPbbGZbzGyhmX3NzEZH0+ebWZeZtUTdq2b2yTzXPs/MVuZzHYORrR53/7q7/32e1rfUzN6Wj2Xnw3B9XsW2XfZ1CoUi4+4twMeB75pZQzT6W8ACd78VwMxOAP4GPAgc7O71wGlAJ3BEbHEPu3utu9cC7wW+ZWZHDc87kcEws7Kka5AS4e7qirADrgNuBOYBm4CJsWkPAN/v5/XzgQcyxj0GfCA2fCbwArCFEDKHxKYdEo3bEs1zZmzaGcBCoBlYBXweqAG2A91AS9RNzvG+rgTuiF7/KDBzANvjYOAu4HXgZeDcPakH+Crw8+h1MwAHLgJWAJuBTwBvBJ6N3vsVsfXMBO6OPo+NwC+A+mja9dG6tkfr+sIAtvFS4P9E62oDyqLhVdF7eRk4Jcu2OBZYC6Rj494NPBv1HwMsAJqAdcB3cmzTecDKHNNGAT8DNgDLgC8BqWhaGvh2tA1eAy6JtmNZjmUtBd6WY9rHgMXR53p7z+8MYMD/AOuj9/Ec8IZcn3fS/1+LqUu8AHV7+MHBaGBN9B/votj4GqALmNfP6+cTC4Xoi24LcGA0fCDQCrwdKAe+EP3nrIiGFwP/Gg2/NfoPeFD02jXAm2J1zon6c37JxOq4jvClekz0JfgL4KZ+XlND+NK+KHrNUdF2mT3YesgeClcBVcCpwA7gN8B4YEr0pXRyNP8B0faqBBqA+4Dvxpa9y5dfX9s4Nv/TwFRgBHBQ9D4nx+rLGpjAEuDtseFbgEuj/oeBD0b9tcBxOZaR8/MiBMJvgbqojkXAR6NpnyB8KTdG2/sv7EEoRL9XG4E50Tb9PnBfNO0dwBNAPSEgDgEm9fV5qxtYp8NHRcrdNxP+wqwGbotNGk04LLi2Z4SZfSs6r9BqZl+KzXtcNL6ZsJdwPfBKNO39wB3ufpe7dwD/TfhiOgE4jvBl8g13b3f3u4HfA+dHr+0AZpvZSHff7O5PDvLt/drdH3P3TkIoHNnP/O8Clrr7te7e6e5PAb8C3jdE9fyHu+9w9z8TvsRvdPf17r4KuJ8QQrj74mh7tbn7BuA7wMl9LLevbdzjcndf4e7bCWFfGb2Xcndf6u5Lciz7RqLPw8zqCH893xjbHgeY2Th3b3H3RwazMcwsDZwHfNHdm919KWHP4IPRLOcC33P3ldHv6TcGs/yYC4Br3P1Jd28Dvggcb2YzovdQR9hDNHd/0d3XxN7f3nzeJU2hUKTM7ELCX2h/Ab4Zm7SZcJhiUs8Id/+Ch/MKvyb8Jd3jEXevd/c6YCJwKPD1aNpkwmGBnmV0E/5KnRJNWxGN67Esmgbh/MQZwDIzu9fMjh/k21sb699GCKC+TAeOjQJui5ltIXyhTByietbF+rdnGa4FMLMJZnaTma0ysybg58C4Ppbb1zbusSI2fTHwT4S9mfXRuibnWPYNwHvMrBJ4D/Cku/es66OEvZSXzOxxM3tXHzVmM46wZ7MsNi7++U+O153RPxiZ26eFsBc5JfpD5ArCocb1Zna1mY2MZt3bz7ukKRSKkJmNJxxP/RjhpPO5ZvYmAHdvJRyHf89glunu6wh/Xf9dNGo14cu2Z51GOIyxKpo21czivz/Tomm4++PufhbhEMtvgJt7VjOYmgZhBXBvFHA9Xa27f3KY6/l6tMzD3H0kcCHh0EaPzPX1tY2zvsbdb3D3k6LXObv+QRCfbyHhC/V04AOEkOiZ9oq7n0/YHt8EbjWzmoG/TTYS/hqfHhvX+/kTDt80xqZNHcSy4zK3Tw0wlp2/Z5e7+9HAbELI/Us0PtfnLQOgUChOVwC/cfd7ol3mLwA/jv4qJBr+iJldGgUIZtYI7JdrgWY2lnAy8oVo1M3AO83sFDMrB/6ZcLLzIULobAO+YGblZjaPECY3mVmFmV1gZqOiQyJNhD0XCH9hjzWzUUO0HXr8HjjQzD4Y1VNuZm80s0OGuZ46wknkrWY2hehLKmYdsH9suK9tvBszO8jM3hp9zjvYeaI8lxuAzwBvJpxT6FnOhWbWEO2ZbIlG51yOmVXFu2jem4GvRZdDTwc+R9gz6nlfnzGzKWZWTzg53p/yjPWUEQ53XWRmR0bv+evAo+6+NPp8j422W2u0Pbr7+bxlIJI+qaFucB1wNuEvqPqM8XcDX4sNHwvcSfhPvwV4HvgaMDaaPp9wjLrnypv1hP+E42PLeDfhhOFW4F7g0Ni0Q6NxW6N53h2NrwD+SDiM1QQ8DpwUe901hEMAW8h99dH/iw3Po5+T09F8BxGuWNoQLf9uwrmIQdVD9hPNZbH5VxI7iU/4IvxSbJs8EW3Ppwlf8itj854FLI/W9fkBbOOl7Hpi+nDCuZ9mwtU4v8+2DWPzTyN8Id6RMf7n0efdQvgj4Owcr58Xvf/M7gDCuaufR9t7BfBldl59VEbYk91EuPros4Q9C8uxnqVZ1vH/ommfIJw073m/jdH4UwhXZbWw80qv2v4+b3X9dxZtYBGRvDCz04Gr3H16vzNL4nT4SESGlJmNMLMzzKwsOoz2FcJFDlIEtKcgRSE6kf6HbNM83JEtBcLMqgmHwg4mnPe4A/iMuzclWpgMiEJBRER66fCRiIj0KrpGtsaNG+czZsxIugwRkaLyxBNPbHT3hv7mK7pQmDFjBgsWLEi6DBGRomJmy/qfS4ePREQkRqEgIiK9FAoiItJLoSAiIr0UCiIi0kuhICIivRQKIiLSq2RCYfmq1dz34AN4t5pWFxHJpWRCYdHVH+LNd72T7dtbky5FRKRglUwojDz0VABamzYnXImISOEqmVBIj6gDYHvLln7mFBEpXSUTCuXV4TG8O1q2JlyJiEjhKqFQqAegrVWhICKSS8mEQmVN2FNo36ZQEBHJpWRCYURt2FPo2q4nAoqI5FJCoRD2FLq2a09BRCSXkgmF6rrRAPiO5oQrEREpXCUTChVV1XR4Gm9XKIiI5FIyoYAZrTaCVFtL0pWIiBSsvIWCmV1jZuvN7Pkc083MLjezxWb2rJnNyVctPbZbNekOhYKISC753FO4Djitj+mnA7Oi7mLgh3msBYAdqWrKOhUKIiK55C0U3P0+4PU+ZjkL+JkHjwD1ZjYpX/UAtKWrKe9Ug3giIrkkeU5hCrAiNrwyGpc3HelaKroUCiIiuRTFiWYzu9jMFpjZgg0bNuzxcjrKa6nq3jaElYmI7FuSDIVVwNTYcGM0bjfufrW7z3X3uQ0NDXu8wq7yWqpdoSAikkuSoXA78KHoKqTjgK3uviafK/SKEAruns/ViIgUrbJ8LdjMbgTmAePMbCXwFaAcwN2vAu4EzgAWA9uAi/JVS69NS6ixNna0t1NVWZn31YmIFJu8hYK7n9/PdAc+na/1Z5OaOQ9efJTmLa9TNSGvFzqJiBSlojjRPFTS0TMVWrduTLgSEZHCVFKhUF4TGsXb3tzX7RMiIqWrpEKhsnYMADsUCiIiWZVUKFSNDKHQ0bol4UpERApTSYVC7cixAHS2bk64EhGRwlRSoVAzKoRC93btKYiIZFNSoVBRPZJOT8EOPZJTRCSbkgoFzGixGqxNoSAikk1phQLQmqqhvL0p6TJERApSyYXCjlQd5R16TrOISDYlFwptZbVUdikURESyKblQ6CgfyYguPZJTRCSbkguF11rLqe7WnoKISDYlFwqN6c2MopWubj1TQUQkU8mFAtNPoMo62NqkK5BERDKVXCika8JdzU2b1ydciYhI4Sm5UCivC6GwbYtCQUQkU8mFQlXdOAB26EE7IiK7KblQqK5vAKCteVPClYiIFJ6SC4Xa+vEAdLYqFEREMpVcKNSNDnsK3dv09DURkUwlFwpWUc0OKkht14N2REQylVwoADRbHek2PWhHRCRTSYbCtnQdFe0KBRGRTCUZCtvLRlHZqTuaRUQylWQorG6roqpDT18TEclUkqEwOrWdeppxV6N4IiJxeQ0FMzvNzF42s8VmdmmW6dPN7K9m9qyZ/c3MGvNZT6/GuYymmda2jmFZnYhIschbKJhZGrgSOB2YDZxvZrMzZvtv4GfufjhwGfCf+aonLlU7njLrZvPGdcOxOhGRopHPPYVjgMXu/qq7twM3AWdlzDMbuDvqvyfL9LwoHxnuam7atHY4ViciUjTyGQpTgBWx4ZXRuLhngPdE/e8G6sxsbOaCzOxiM1tgZgs2bNiw14WNGD0RgG2bFQoiInFJn2j+PHCymT0FnAysAroyZ3L3q919rrvPbWho2OuV1o4JodC2VYePRETiyvK47FXA1NhwYzSul7uvJtpTMLNa4L3unve7ykaOmwRAZ7OeqSAiEpfPPYXHgVlmtp+ZVQDnAbfHZzCzcWbWU8MXgWvyWE+vyrpwTsFb9UwFEZG4vIWCu3cClwB/Al4Ebnb3F8zsMjM7M5ptHvCymS0CJgBfy1c9u0iXsZU60tvVfLaISFw+Dx/h7ncCd2aM+3Ks/1bg1nzWkEtzup7KHQoFEZG4vIZCIVvXVYt1KhREROKSvvooMRWjJtBgav9IRCSuZEOhu7qB0b6F9s7upEsRESkYJRsK1E2k3lrZuEV7CyIiPUo2FMpHhXsVNq9b0c+cIiKlo2RDoXrMZACaN63qZ04RkdJRsqFQ1xBa6d6xeU3ClYiIFI6SDYVRUSh0bVEoiIj0KNlQKKsbTxcpaFGjeCIiPUo2FEil2WqjKN+uRvFERHqUbigA67ye7mbtKYiI9CjpULC6iUy0zUmXISJSMEo6FDprJjLWN7GjY7fn+oiIlKSSDgVGTqHBmli3WXc1i4hAiYdC5djwYLhNq5clXImISGEo6VCobZgGQPMGhYKICJR4KIyeuB8AbZvU/pGICJR4KFSNDXc1d29V+0ciIlDioUBlHS1WQ3nL6qQrEREpCKUdCsAaH4M3KRREREChACMbmcRG3D3pSkREElfyodA5spFJbGDLto6kSxERSVzJh0Jq9HTGWAur1qlhPBGRfkPBzGaaWWXUP8/M/tHM6vNf2vCoGb8/AK+vWpxwJSIiyRvInsKvgC4zOwC4GpgK3JDXqobR6CkHANC6/tWEKxERSd5AQqHb3TuBdwPfd/d/ASblt6zh07On0PW67moWERlIKHSY2fnAh4HfR+PKB7JwMzvNzF42s8VmdmmW6dPM7B4ze8rMnjWzMwZe+hCpGcd2r9DhIxERBhYKFwHHA19z99fMbD/g+v5eZGZp4ErgdGA2cL6Zzc6Y7UvAze5+FHAe8IPBFD8kzNhSOYkZ6Y3DvmoRkUJT1t8M7r4Q+EcAMxsN1Ln7Nwew7GOAxe7+avTam4CzgIXxxQMjo/5RQCJ3kW2rmcr4Tcto7+ymoqzkL8gSkRI2kKuP/mZmI81sDPAk8GMz+84Alj0FiLc0tzIaF/dV4EIzWwncCfxDjhouNrMFZrZgw4YNA1j14HSNOYAZtpblm1qGfNkiIsVkIH8Wj3L3JuA9wM/c/VjgbUO0/vOB69y9ETgDuN7MdqvJ3a9297nuPrehoWGIVr1T1cSDqLIO1i5/ZciXLSJSTAYSCmVmNgk4l50nmgdiFeHy1R6N0bi4jwI3A7j7w0AVMG4Q6xgSo6ceAkDTypeGe9UiIgVlIKFwGfAnYIm7P25m+wMD+ZP6cWCWme1nZhWEE8m3Z8yzHDgFwMwOIYTC0B8f6kfdlHD+u3PDouFetYhIQRnIieZbgFtiw68C7x3A6zrN7BJCoKSBa9z9BTO7DFjg7rcD/0w4R/FZwknn+Z5Ey3S142n2EbSuenHYVy0iUkj6DQUzawS+D5wYjbof+Iy7r+zvte5+J+EEcnzcl2P9C2PLTY4ZW1P1zOhagbtjZklXJCKSiIEcPrqWcNhnctT9Lhq3T2mfeBRTbT3rmtqSLkVEJDEDCYUGd7/W3Tuj7jpg6C8BSlj5hINotI0sWrku6VJERBIzkFDYZGYXmlk66i4ENuW7sOE2Zlo42bxu6cJ+5hQR2XcNJBQ+QrgcdS2wBjgHmJ/HmhJRM+lgABY88VjClYiIJKffUHD3Ze5+prs3uPt4dz+bAVx9VHTGzgTg0Eo9bEdESteeNvTzuSGtohBU1LDV6qhvWUJnV3fS1YiIJGJPQ2GfvGZz2/g5HGzLWbppW9KliIgkYk9DYfhvMBsG6clHMtNW88pKHUISkdKUMxTMrNnMmrJ0zYT7FfY59fsfTdqc2/74p6RLERFJRM47mt29bjgLKQQVjUcCML19ScKViIgkQ0+UiaufxrZUHbNtKUk0wSQikjSFQpwZW+sPZv+uJazeuiPpakREhp1CIUN60uEcbCt4bpme2SwipUehkGH0zLlUWQfX//6upEsRERl2A2k6u5ndL0HdCiwA/jl6vsI+o3xKONn8xqp+WwYXEdnn9BsKwHeBlcANhJvWzgNmAk8C1wDz8lVcIsYdSAdl1G9+jpa2TmorB7KJRET2DQM5fHSmu//I3Zvdvcndrwbe4e6/BEbnub7hly6jdcLRHJ1axBPLNiddjYjIsBpIKGwzs3PNLBV15wI9l+bsk9dt1hzwJmbbMi679ZGkSxERGVYDCYULgA8C66Pug8CFZjYCuCSPtSWmfP8TSZvz5hGvJV2KiMiw6veAeXQi+e9yTH5gaMspEI3H0E2aca8/QWtbJzU6ryAiJaLfPQUzazSzX5vZ+qj7lZk1DkdxiamspXXMbObaSzqvICIlZSCHj64Fbic0gjcZ+F00bp9WdcCbONKW8G+3PJF0KSIiw2YgodDg7te6e2fUXQc05LmuxJXvdyKV1sER6VfVDpKIlIyBhMImM7vQzNJRdyGwKd+FJW7a8QDs1/wESza0JFyMiMjwGEgofAQ4F1gLrAHOAebnsabCUDOW9glH8pb001x07eNJVyMiMiz6DQV3X+buZ7p7g7uPd/ezgfcOQ22JqzjkDI5MLWH/GrWYKiKlYU8bxPvckFZRqA48lRTOuDX3sr5ZwSAi+749DQUb0Exmp5nZy2a22MwuzTL9f8zs6ahbZGZb9rCe/Jh4BB3V43lL6mnOverhpKsREcm7PQ2Ffi/HMbM0cCVwOjAbON/MZu+yEPfPuvuR7n4k8H3gtj2sJz9SKcoOegdvST/LqMqkixERyb+coWBmzWbWlKVrJtyv0J9jgMXu/qq7twM3AWf1Mf/5wI2Dqn4Y2IGnUcM2qtc+zrsuvz/pckRE8ipnKLh7nbuPzNLVuftA2n2YAqyIDa+Mxu3GzKYD+wF355h+sZktMLMFGzZsGMCqh9DMt+DlNZyVfoj1zW3Du24RkWFWKE9eOw+41d27sk1096vdfa67z21oGOb75ipqsNlncVb5Y3S3b2d7e9YSRUT2CfkMhVXA1NhwYzQum/MowENHvY48nxHdrRzf8Qinf+++pKsREcmbfIbC48AsM9vPzCoIX/y3Z85kZgcTHtZTuJf3TD8JH9XIRbUP09HldHR1J12RiEhe5C0U3L2T8LyFPwEvAje7+wtmdpmZnRmb9TzgJi/kBoZSKezw8zii/Sk6tqzm10/l2uERESluVsjfxdnMnTvXFyxYMPwr3rQE//7R3DTi/fwodR5/+dzJlKUL5ZSMiEjfzOwJd5/b33z6VhuosTOxg87gjB13sHbTZn65YEX/rxERKTIKhcHYspxR3swHqh7kK799ga3bOpKuSERkSCkUBuMT98PkOXwk9Qe6urv4n78sSroiEZEhpVAYDDNob6WxexUX1CzguoeW8vSKwmquSURkbygUButTj8CEw/j3ut9Qk+7mvKsf1g1tIrLPUCgMVioF3kV6y1I+NfIBdnR0840/vJh0VSIiQ0KhsCc++RDMeBOfTv2KmXWd/PThZfzumdVJVyUistcUCnvCDE79D9i2iT8fdg+1lWV85qanWLi6KenKRET2ikJhT00+Cmonkn7yWu4/r5J0yjj7ygdZuXlb0pWJiOwxhcLe+IcFUD+N0X/5PL/9+By63Dnl2/eyZuv2pCsTEdkjCoW9UVEDf3c5bHqF2c9+i9s+eQKdXc68//obi9c3J12diMigKRT21sy3QN1kWPC/HNH6ELd96gS6up23fec+TvuumtkWkeKiUBgKn3kaymvg5g9yRNV67vn8PEaUp3lpbTNv+a97KLZGB0WkdCkUhkJZJXzqIcDgqpOYWt7MI/96CqNGlPHapm3M+Y+72LKtPekqRUT6pVAYKqNnwEf/DKkyuOF9jErt4Kn/eypTR49g87YOjrrsLt7xP/cmXaWISJ8UCkNpyhx433Ww9nm46QJSndu5//+8ld9dchKV5SleXtfCAf96J2dd8UDSlYqIZKVQGGoHngpn/wBeuw9uOBfaWjiscRTPfCXsNXR2O8+s3MqJ3/grLW2dSVcrIrILPXktX569BX59MUw9Fi64BSrrAFizdTvvuvwBNrWGcwzlaePQySP5zadPSrJaEdnH6clrSTv8fXDONbD8Yfjvg2BLeFLbpFEjeOL/vp3ffvpExtZU0NHlPL1iK3P+4y4efXWTrlQSkURpTyHfXrkLbng/WArm3wHTjt1l8tlXPsALq5vo6AqfQ8pg6phqfvcPJzGyqjyJikVkHzTQPQWFwnBY/xJcfTJ0tsE7vw1zPxIa1Ys554cP8fyqrbR3ddMdfSTplDFpVBU/uGAOh04eRTplWRYuItI/hUKh2fY6/OqjsORuOOidcOb3oWZs1lnfefn9LFrXTFe39wYEQFnKmDpmBNd/9FgaR1cPU+Eisi9QKBSi7m545Afw5y9Bujycczj4XbvtNcS95wcPsnBNE53dTleX0/NpmYWQmDG2hts+dQJ1OtQkIn1QKBSyNc/Arz8B6xdCVT189C5oOLDfl7k7Z17xIIvWNYeQiO1GpA3S6RRpg0MmjeS2T52Yz3cgIkVGoVDoujrh8Z/APV+HjlY47pPw5n+BqlEDXkRbZxdnX/EgSza00JlxqMkI5yRSKWPG2Gp+/vfHMr6uaujfh4gUBYVCsWjZAH/9d3jqeqgeC/O+CHM+DGUVg17U1u0dHPf1v7Cjo5t0yuj23YPCDFJmpAwm14/gK393KI2jRzBl9AiqK8qG7n2JSEEpiFAws9OA7wFp4Cfu/o0s85wLfBVw4Bl3/0Bfy9znQqHH6qfgp2dCWxPUT4OTL4XD3w/pvfuibmnr5H1XPcSrG1p7Q6LbnWwfezw0en5OH1vN5ecfRePoamorFRoixSrxUDCzNLAIeDuwEngcON/dF8bmmQXcDLzV3Teb2Xh3X9/XcvfZUABwD/c13Dof2lth9H7hsNKRF0Bl7ZCuqrvb2djSxvxrH+PVja10ezhnEf+ZTSojNHp+zhpfyy8+dhw1FWmsjxPnIpKMQgiF44Gvuvs7ouEvArj7f8bm+RawyN1/MtDl7tOh0MMdXrojnIxubwZLwwmXwDEfh1FThqkEZ2NLO/OveYyFa5oAKEtbv6EBO/c4zCx7P2F41vharrvoGEaOKNc9GCJ5VgihcA5wmrv/fTT8QeBYd78kNs9vCHsTJxIOMX3V3f+YZVkXAxcDTJs27ehly5blpeaCtOJxePgKWPgbwODQd8PR82G/N/d5KWu+uTvv/eFDvLS2GfdwqazHDk15NE/P+IGIB4YB9AxH4zLnmdlQy9UfOprayjJqKspIKVhEciqWUPg90AGcCzQC9wGHufuWXMstiT2FbDYvg0d/BI9dBd1dUFYVTkofcR7UTUy6un51dHWzdXsHW7d38A83PMlLa5pxoKIstTNAYmEC9A4PVk9whH6L9Uc/o4HM8dPHVPPVM9/AiIo01RVpRpSnqSoP/VXlae3NSFErhFAYyOGjq4BH3f3aaPivwKXu/niu5ZZsKPTo2A4Lb4cnroPlD4VxlaPg1MvgkDOhekyi5eVDd7fT0t5Jy45OPn79ApZsaN1tL8Tde9uP6vny3iVgon+G4rc9cy8mW8DkGt/e0Q3AIZNHkjIj3XNozeCnHzmG8nSKinRKez0y5AohFMoIh4ZOAVYRTjR/wN1fiM1zGuHk84fNbBzwFHCku2/KtdySD4W4DYvg+Vvhwe9B5w7AYNapcNg5cNDpvc11y+46u7p5/9WP8NLapl3CIjNE2jrDl3h5WQp6giialus1+fgfZRkD8eF4W1lZ52f3I42WY2JPX3v0vivKUrtOy5FVOSOs57AfsKO9C4CqinSuufuVuZ7t0TJH9CxzD7O052Xb2sLyqiuz1xi/iGL2pJH88uPH8/4fPczCNU29w4Uq8VCIijgD+C7hfME17v41M7sMWODut1vYwt8GTgO6gK+5+019LVOhkIV7uEv6+V/BQ98HPLTKesiZ8Ib3hqAo141rw62jq5vtHV3saO/iYz9bwCvrW3q/GCvLU1lDpLc/HjTx6RkjHHrvbE9blvkzFlJcdyUVt5748Izh3QcGnmUzG2q563Mn71k9hRAK+aBQ6Ed3N6x8DG6ZD81rCQGRhsPPDSepp5845Je3SvHquZLsvKsf5sXoKjPY+RfziMy/mAcQMJnB1qMtOnRWWZ7q8/WD0bvMsl0fDbOny47vIe22jBzflf2tqzM6rFmWtt1Cui/ZZpvZUMOfP6tQ2IVCYRC6OmHpfXDbJ6B1XTTSYPoJsP+80E2es9c3yIlI4VMoyK4622DZQ/Dq30KbS+0tYbyl4cB37AyJcQcmeqmriOSHQkH6tu11eO2+EBLP3BidqAbSFXDoe2DGSTDteBg7UyEhsg9QKMjgbF4Kr94Lr90bLnnt7gjjU+Vw0GmofE4cAAAOYklEQVQw7QSYdhxMPFyHm0SK0EBDQf+7JRg9A46eAUd/OJxQ2/hKuA9i+SPwzE3w4u/CfJYKd1NPOz50jXOhoibJykVkCGlPQQamaTUsfxj+9G/Qsg68O5pgMGVOFBLHhZ814xItVUR2p8NHkl87tsKKx0JQPPbj0OR3j7IRcPj7oj2JN8KYmZBK5V6WiOSdQkGGV2dbeCbE8ofDHdbbN+86vXJkaAJ80hEw+SgYNwtSe35nq4gMjkJBktXdDRteDEGx5pnQrXw8dtiJEBRzPgQTDwvduAMhXZ5czSL7MJ1olmSlUjDh0NAddWEY190VTmCvfgpWPwlP3xiaBe9lOwNi4mEw4Q0w8Q0wYnQib0GkFGlPQZLV1QmbXoG1z8PaZ+HJn4XzFfGb/NOVcMApUUgcFoKifobOU4gMgg4fSXFrXgdrn4N1z4WfL98Zmg2PqxwZ2nSaeBhMOAwaDlK7TiI56PCRFLe6CaGb9bad49q3hfMUa58LexbP/jI02bELg1lvDwHRcAg0HAwNB6oZcZEB0p6CFLfubtiyNITEhpfD0+m2b9r1hDYABlX14Ul142aFk9rjZkHtBDXjISVBh4+ktHV1wpZlsP5F2PASPHoVbMsWFoS7tKvHwrGf2BkWY/aHssrhr1skTxQKItl0d0Pz6nAV1MZXYOMieO5m2NHEbi3YWwqqRoX7K8bNCjfhjZ0JdZO0dyFFR6EgMlhtzbBpMWxcHMJi4yJ48fbsexfl1eGKqDEzw17F2Jmhv26iAkMKkk40iwxWZV2423ryUbuO7+6CrSvh9SWwaQm8/ho8cwO8dEeOwKgJJ8jHzISxB+wMjJpxCgwpeAoFkf6k0jB6euhmvjWMO+3r4Wd3F2xdEYXFq6HbtBgW/WnnMyriKmrhwNNCUIyeAfXRcusmqdkPKQgKBZG9kUqHL/fRM4BTdp3W1QFblkeBsSSExXO3wvO/IusTeMuqwqNS66dHy5y+s3/EaO1lyLBQKIjkS7o87BGMnblz3Du/HX52toVDUptfg83LwpVSm5fB4r/AknvIGhrlNTDzLbuGxugZUD8NykcMwxuSUqBQEElCWeXugRG3oykKiqW7hsaSu6FjW5YXWHieRc/hqPppob9+GoycoqflyYDpN0WkEFWN3NkwYCZ3aFkfAqM3OJaGp+Mtf4SsexlYaBbkkHftDIyew1N1k9SOlPTSJaki+5rOdmhaGc5nbFke7Wksh0V/DJfdZgsNS4XQmH0W1E+FUdOin1NDaGhPo+jpklSRUlVWEe6dGLN/9umdbbBlRWgeJPN8xpM/I/eeRh0cdHoIivqpMKoxhMeoRqiozuMbkuGkUBApNWWVMO6A0GXTvg2aVoW9i60rQoBsXQEv/wGevZmsoZEqD02aj5oaC43YT109VTQUCiKyq4rqqNHAWdmnd3VC85pYYCwPPxf+NjxhL9sNfRDuAp9+YiwwpkUh0hjuBNd9GgUhr6FgZqcB3wPSwE/c/RsZ0+cD/wWsikZd4e6ZbSGLSCFJl4Uv9vqpMD02/szLw0/30PjgLnsaK0NT50v+GqZnvU+jEhqPyTg8NXXnFVTlVcPx7kpe3kLBzNLAlcDbgZXA42Z2u7svzJj1l+5+Sb7qEJFhZhaa9KgZB1Pm7Bx/euxvwraWXQ9N9fS/8idY+gA5z2tUVMOMN4WT3yOnwMhJu/ZXjtRhqr2Uzz2FY4DF7v4qgJndBJwFZIaCiJSayloYf0josulsD+c1tq7cGRhNq6LDVivDSfHuzt1fV14DIydHYTE56p8cBUfUX9OgQ1V9yGcoTAFWxIZXAsdmme+9ZvZmYBHwWXdfkTmDmV0MXAwwbdq0PJQqIgWlrALG7Be6XDq2h5BoWhP9XB265tXhJr+2+8m+x0G0Z5ERFnVRmPT0l+jhqqRPNP8OuNHd28zs48BPgbdmzuTuVwNXQ7hPYXhLFJGCVD6i70tvITw/o3XDzr2MptW7Bsgrd0Hn9uyvHTE6hEfdpCgspuwMkZ6f++BVVfkMhVXA1NhwIztPKAPg7ptigz8BvpXHekSk1KRSO5/33ZcdTVFYrIr2PFaHn02rYel94TLdXDf91U/Pfn6j5/BV7YSiuvkvn5U+Dswys/0IYXAe8IH4DGY2yd3XRINnAi/msR4RkeyqRoau4aDc83S2Q8vaKCxWZRyyWhMeyNTZlv216QqYcGjfex6Vtfl5b4OUt1Bw904zuwT4E+GS1Gvc/QUzuwxY4O63A/9oZmcCncDrwPx81SMislfKKqJ2o/o4r9lzOW7vYar4nsfqPho0BCwd7g3Jdn6jZ8+jemze26lS20ciIsOtvTXjMFXGnse656GrfffXjd4fPvPUHq1SbR+JiBSqipq+mxqBcOd46/pdD1HNOCnvpSkUREQKUbps5+Wyw0iNqIuISC+FgoiI9FIoiIhIL4WCiIj0UiiIiEgvhYKIiPRSKIiISC+FgoiI9Cq6Zi7MbAOwbA9fPg7YOITlDDfVn5xirh1Uf9IKof7p7t7Q30xFFwp7w8wWDKTtj0Kl+pNTzLWD6k9aMdWvw0ciItJLoSAiIr1KLRSuTrqAvaT6k1PMtYPqT1rR1F9S5xRERKRvpbanICIifVAoiIhIr5IJBTM7zcxeNrPFZnZp0vX0x8yWmtlzZva0mS2Ixo0xs7vM7JXo5+ik6+xhZteY2Xozez42Lmu9FlwefRbPmtmc5CrvrTVb/V81s1XRZ/C0mZ0Rm/bFqP6XzewdyVTdW8tUM7vHzBaa2Qtm9plofFFs/z7qL5btX2Vmj5nZM1H9/x6N38/MHo3q/KWZVUTjK6PhxdH0GUnWvxt33+c7IA0sAfYHKoBngNlJ19VPzUuBcRnjvgVcGvVfCnwz6Tpjtb0ZmAM831+9wBnAHwADjgMeLdD6vwp8Psu8s6PfoUpgv+h3K51g7ZOAOVF/HbAoqrEotn8f9RfL9jegNuovBx6NtuvNwHnR+KuAT0b9nwKuivrPA36Z5PbP7EplT+EYYLG7v+ru7cBNwFkJ17QnzgJ+GvX/FDg7wVp24e73Aa9njM5V71nAzzx4BKg3s0nDU2l2OerP5SzgJndvc/fXgMWE37FEuPsad38y6m8GXgSmUCTbv4/6cym07e/u3hINlkedA28Fbo3GZ27/ns/lVuAUM7NhKrdfpRIKU4AVseGV9P1LVwgc+LOZPWFmF0fjJrj7mqh/LTAhmdIGLFe9xfR5XBIdYrkmdriuYOuPDkUcRfhrtei2f0b9UCTb38zSZvY0sB64i7D3ssXdO6NZ4jX21h9N3wqMHd6KcyuVUChGJ7n7HOB04NNm9ub4RA/7nkVzPXGx1Rv5ITATOBJYA3w72XL6Zma1wK+Af3L3pvi0Ytj+Weovmu3v7l3ufiTQSNhrOTjhkvZYqYTCKmBqbLgxGlew3H1V9HM98GvCL9q6nt386Of65CockFz1FsXn4e7rov/s3cCP2XmIouDqN7NywhfqL9z9tmh00Wz/bPUX0/bv4e5bgHuA4wmH5cqiSfEae+uPpo8CNg1zqTmVSig8DsyKrgaoIJzcuT3hmnIysxozq+vpB04FnifU/OFotg8Dv02mwgHLVe/twIeiq2COA7bGDnMUjIzj7O8mfAYQ6j8vuopkP2AW8Nhw19cjOh79v8CL7v6d2KSi2P656i+i7d9gZvVR/wjg7YTzIvcA50SzZW7/ns/lHODuaE+uMCR9pnu4OsIVF4sIx/r+Lel6+ql1f8LVFc8AL/TUSzju+FfgFeAvwJika43VfCNhF7+DcPz0o7nqJVytcWX0WTwHzC3Q+q+P6nuW8B95Umz+f4vqfxk4PeHaTyIcGnoWeDrqziiW7d9H/cWy/Q8HnorqfB74cjR+f0JYLQZuASqj8VXR8OJo+v5J1p/ZqZkLERHpVSqHj0REZAAUCiIi0kuhICIivRQKIiLSS6EgIiK9FAoiItJLoSAyAGZ2ZEbTzWfaEDXBbmb/ZGbVQ7Eskb2l+xREBsDM5hNu8rokD8teGi174yBek3b3rqGuRUR7CrJPMbMZZvaimf04euDJn6OmB7LNO9PM/hi1RHu/mR0cjX+fmT0fPTTlvqhplMuA90cPe3m/mc03syui+a8zsx+a2SNm9qqZzYta9XzRzK6Lre+HZrYg40Es/whMBu4xs3uicedbeMDS82b2zdjrW8zs22b2DHC8mX3DwoNpnjWz/87PFpWSk/Qt1erUDWUHzAA6gSOj4ZuBC3PM+1dgVtR/LKENGghNK0yJ+uujn/OBK2Kv7R0GriM8o8MIbeU3AYcR/uh6IlZLTzMTaeBvwOHR8FKiByoRAmI50ACUAXcDZ0fTHDg36h9LaOLB4nWqU7e3nfYUZF/0mrs/HfU/QQiKXUTNNJ8A3BK1g/8jwhPAAB4ErjOzjxG+wAfid+7uhEBZ5+7PeWjd84XY+s81sycJ7eQcSniCWKY3An9z9w0e2tr/BeGpcABdhJZEIbTBvwP4XzN7D7BtgHWK9Kms/1lEik5brL8LyHb4KEV4CMqRmRPc/RNmdizwTuAJMzt6EOvszlh/N1AWteb5eeCN7r45OqxUNYDlxu3w6DyCu3ea2THAKYSWNi8hPOlLZK9oT0FKkoeHuLxmZu+D3ofZHxH1z3T3R939y8AGQtv3zYTnB++pkUArsNXMJhAentQjvuzHgJPNbJyZpYHzgXszFxbt6Yxy9zuBzwJH7EVtIr20pyCl7ALgh2b2JcJzdW8iNFf+X2Y2i3CO4K/RuOXApdGhpv8c7Irc/Rkzewp4ifAoxgdjk68G/mhmq939LdGlrvdE67/D3bM9N6MO+K2ZVUXzfW6wNYlko0tSRUSklw4fiYhILx0+kn2emV0JnJgx+nvufm0S9YgUMh0+EhGRXjp8JCIivRQKIiLSS6EgIiK9FAoiItLr/wMS1x57aMKx2QAAAABJRU5ErkJggg==\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "#params = {\"objective\": \"multi:softprob\", \"eval_metric\":\"mlogloss\", \"num_class\": 3}\n",
    "xgb1 = XGBClassifier(\n",
    "        learning_rate =0.1,\n",
    "        n_estimators=1000,  #数值大没关系，cv会自动返回合适的n_estimators\n",
    "        max_depth=5,\n",
    "        min_child_weight=1,\n",
    "        gamma=0,\n",
    "        subsample=0.3,\n",
    "        colsample_bytree=0.8,\n",
    "        colsample_bylevel=0.7,\n",
    "        objective= 'multi:softprob',\n",
    "        seed=3)\n",
    "\n",
    "modelfit(xgb1, X_train, y_train, cv_folds = kfold)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/home/zhangwt/.local/lib/python3.6/site-packages/ipykernel_launcher.py:1: FutureWarning: from_csv is deprecated. Please use read_csv(...) instead. Note that some of the default arguments are different, so please refer to the documentation for from_csv when changing your function calls\n",
      "  \"\"\"Entry point for launching an IPython kernel.\n"
     ]
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "cvresult = pd.DataFrame.from_csv('1_nestimators.csv')\n",
    "        \n",
    "# plot\n",
    "test_means = cvresult['test-mlogloss-mean']\n",
    "test_stds = cvresult['test-mlogloss-std'] \n",
    "        \n",
    "train_means = cvresult['train-mlogloss-mean']\n",
    "train_stds = cvresult['train-mlogloss-std'] \n",
    "\n",
    "x_axis = range(0, cvresult.shape[0])\n",
    "        \n",
    "pyplot.errorbar(x_axis, test_means, yerr=test_stds ,label='Test')\n",
    "pyplot.errorbar(x_axis, train_means, yerr=train_stds ,label='Train')\n",
    "pyplot.title(\"XGBoost n_estimators vs Log Loss\")\n",
    "pyplot.xlabel( 'n_estimators' )\n",
    "pyplot.ylabel( 'Log Loss' )\n",
    "pyplot.savefig( 'n_estimators4_1.png' )\n",
    "\n",
    "pyplot.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 25,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/home/zhangwt/.local/lib/python3.6/site-packages/ipykernel_launcher.py:1: FutureWarning: from_csv is deprecated. Please use read_csv(...) instead. Note that some of the default arguments are different, so please refer to the documentation for from_csv when changing your function calls\n",
      "  \"\"\"Entry point for launching an IPython kernel.\n"
     ]
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 1000x1000 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "cvresult = pd.DataFrame.from_csv('1_nestimators.csv')\n",
    "\n",
    "cvresult = cvresult.iloc[100:]\n",
    "# plot\n",
    "test_means = cvresult['test-mlogloss-mean']\n",
    "test_stds = cvresult['test-mlogloss-std'] \n",
    "        \n",
    "train_means = cvresult['train-mlogloss-mean']\n",
    "train_stds = cvresult['train-mlogloss-std'] \n",
    "\n",
    "x_axis = range(100,cvresult.shape[0]+100)\n",
    "        \n",
    "fig = pyplot.figure(figsize=(10, 10), dpi=100)\n",
    "pyplot.errorbar(x_axis, test_means, yerr=test_stds ,label='Test')\n",
    "pyplot.errorbar(x_axis, train_means, yerr=train_stds ,label='Train')\n",
    "pyplot.title(\"XGBoost n_estimators vs Log Loss\")\n",
    "pyplot.xlabel( 'n_estimators' )\n",
    "pyplot.ylabel( 'Log Loss' )\n",
    "pyplot.savefig( 'n_estimators_detail.png' )\n",
    "\n",
    "pyplot.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "n_estimators is :  320\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/home/zhangwt/.local/lib/python3.6/site-packages/ipykernel_launcher.py:2: FutureWarning: from_csv is deprecated. Please use read_csv(...) instead. Note that some of the default arguments are different, so please refer to the documentation for from_csv when changing your function calls\n",
      "  \n"
     ]
    }
   ],
   "source": [
    "# n_estimators\n",
    "cvresult = pd.DataFrame.from_csv('1_nestimators.csv')\n",
    "#cvresult.shape\n",
    "#cvresult.head\n",
    "print(\"n_estimators is : \", cvresult.shape[0])\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "train-mlogloss-mean is : 0.48337559999999996\n",
      "test-mlogloss-mean is : 0.5869328\n"
     ]
    }
   ],
   "source": [
    "# train-mlogloss-mean\n",
    "print(\"train-mlogloss-mean is :\", cvresult['train-mlogloss-mean'][319])\n",
    "print(\"test-mlogloss-mean is :\", cvresult['test-mlogloss-mean'][319])\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.6.6"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
